home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Shareware World / Info / For Developers / Mops 3.4.sea / Mops source / Toolbox classes / Drvr < prev    next >
Text File  |  1994-05-08  |  2KB  |  67 lines

  1. \ drvr - parameter block for driver interface
  2. \ July 90    mrh  Mops version.
  3. \  8/16/90    rfl     close: must call kill: first
  4. Decimal
  5.  
  6. \ basic parameter block for drivers
  7.  
  8. :class    PBDrvr    super{ object }
  9. record
  10. {    12 Bytes    Name        \ driver name
  11.     12 Bytes    Header        \ fields for internal use
  12.  
  13.     var        IOComp        \ i/o completion ptr
  14.     int        IOResult    \ return code
  15.     var        IONamePtr    \ name of drvr
  16.     int        vRef        \ 22
  17.     int        IORefNum    \ 24
  18.     int        csCode        \ 26
  19.     int        csP1        \ 28
  20.     int        csP2        \ 30
  21.     var        IOBuffer
  22.     var        IOReq
  23.     var        IOAct
  24.     int        IOPosMode
  25.     var        IOOffset
  26. }
  27.  
  28. :m FCB:        \ ( -- fcb-addr )
  29.     addr: header   ;M
  30.  
  31. :m NAME:    \ ( addr len -- )  Names the driver.
  32.     ^base 50 erase  addr: name  >str255  put: ioNamePtr  ;m
  33.  
  34. :m KILL:
  35.     addr: header  fdos$ a406  ( Killio )  0 put: IOResult  ;m
  36.  
  37. :m OPEN:    \ ( -- fCode )
  38.     addr: header 0 (open)  ;m
  39.  
  40. :m CLOSE:    \ ( -- fCode )
  41.     kill: self  drop  addr: header  (close)  ;m
  42.  
  43. :m READ:    \ ( addr len -- fCode )  Reads n bytes via the driver.
  44.     addr: header swap rot (read)  ;m
  45.  
  46. :m WRITE:    \ ( addr len -- fCode )  Writes n bytes via the driver.
  47.     addr: header swap rot (write)  ;m
  48.  
  49. :m READNW:    \ ( cfa:proc addr len -- fCode )  No-wait read.
  50.         \    Requires a completion PROC.
  51. \    put: IOReq  put: IOBuffer  put: IOcomp
  52. \    addr: header  fcall PBRead,ASYNC  ;m
  53.     rot -> CPaddr  read: self  ;m
  54.     
  55. :m WRITENW:    \ ( cfa:proc addr len -- fCode )  No-wait write.
  56. \    put: IOReq  +base put: IOBuffer  >body +base put: IOComp
  57. \    addr: header fcall PBWrite,ASYNC  ;m
  58.     rot -> CPaddr  write: self  ;m
  59.  
  60. :m BYTESREAD:    \ ( -- #bytes )  Returns actual count of bytes read.
  61.     get: IOAct  ;m
  62.  
  63. :m RESULT:    \ ( -- IOResult )  Returns the current IOResult value.
  64.     get: IOResult  ;m
  65.  
  66. ;class
  67.